package com.niuma.dao.user;

import com.niuma.dao.BaseDao;
import com.niuma.pojo.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author 一颗蛋50斤
 */
public class UserDaoImpl implements UserDao {
    /**
     * 这个方法用来从数据库中查询某个用户
     * 以前端登陆页面的登陆账号为条件从数据库中查询这个用户
     * 最后将这个用户的信息保存返回
     * @param connection 数据库连接对象
     * @param userCode 用户的账号
     * @return 用户的信息
     * @throws SQLException 数据库操作异常
     */
    @Override
    public User getLoginUser(Connection connection, String userCode) throws SQLException {
//        PreparedStatement preparedStatement =null;
        ResultSet resultSet = null;
        User user = null;

        // 如果数据库连接不为空则执行查询操作
        if (connection != null) {
            // 编写查询登陆时所输入的账号的用户的 sql
            String sql = "select * from t_user where userCode=?";
            // 将前面传输过来的数据放入数据列表中
            Object[] params = {userCode};

            resultSet = BaseDao.execute(connection, null, null, sql, params);

            if (resultSet.next()) {
                user = new User();
                user.setId(resultSet.getInt("id"));
                user.setUserCode(resultSet.getString("userCode"));
                user.setUserName(resultSet.getString("userName"));
                user.setUserPassword(resultSet.getString("userPassword"));
                user.setGender(resultSet.getInt("gender"));
                user.setPhone(resultSet.getString("phone"));
                user.setEmail(resultSet.getString("email"));
                user.setUserRole(resultSet.getInt("userRole"));
                user.setCreationDate(resultSet.getTimestamp("creationDate"));
            }
        }
        return user;
    }

    /**
     * 这个方法是用来修改密码的，如果修改成功了就会返回真，反之则返回假
     * @param connection 数据库连接对象
     * @param id 用户的 id
     * @param password 用户所要修改的密码
     * @return true or false
     * @throws SQLException 数据库操作异常
     */
    @Override
    public boolean updatePassword(Connection connection, int id, String password) throws SQLException {
        boolean flag = false;

        // 如果数据库连接不为空则执行修改密码操作
        if (connection != null) {
            // 编写修改密码的 SQL 语句
            String sql = "update t_user set userPassword = ? where id = ?";
            // 将要修改的用户密码和 id 写入数组中
            Object[] params = {password, id};
            // 执行密码修改操作
            int executeNumber = BaseDao.execute(connection, null, sql, params);
            /*
            执行增加，修改和删除操作的时候，会返回一个受影响行数
            所以我们判断受影响行数是否大于 0
            如果修改行数大于 0 就表明修改成功了
            所以我们这里就进行判断，如果修改成功了就减 flag 设置为 true
             */
            if (executeNumber > 0) {
                flag = true;
            }
        }
        return flag;
    }
}
